package com.example.demo.service.exam;

import com.example.demo.domain.PageResult;
import com.example.demo.domain.exam.ExamPaper;
import com.example.demo.domain.exam.QueryModel;
import com.example.demo.domain.exam.condition.ExamPaperCondition;
import com.example.demo.dto.QuestionNumDTO;
import com.example.demo.enums.PaperType;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface ExamPaperService {

    /**
     * 试卷信息分页接口
     * 培训师创建的只能自己看到
     *
     * @return 试卷信息
     */
    PageResult<ExamPaper> page(QueryModel<ExamPaperCondition> query);

    List<ExamPaper> getAllExamPaperByCondition(QueryModel<ExamPaperCondition> model);

    /**
     * 创建试卷
     */
    void createExamPaper(List<ExamPaper> examPapers);

    /**
     * 删除试卷
     *
     * @param id 试卷标识
     */
    void deleteExamPaper(Long id);

    /**
     * 更新试卷
     *
     * @param examPaper 试卷实体
     */
    void updateExamPaper(ExamPaper examPaper);

    /**
     *  获取试卷详细题目
     */
    ExamPaper getExamPaperDetail(Long paperId, PaperType paperType);

    ExamPaper randomGroupPaper(QuestionNumDTO dto);

    Map<Long, String> getNameMapByIds(List<Long> paperIds);

    ExamPaper getById(Long id);

    ExamPaper getExamPaperWithOnlyProgrammingQuestion(Long paperId);

    Map<Long, Set<String>> getProblemPoints(Long paperId);

    Map<Long, String> getQuestionNameMap(Long paperId);

    List<Long> getQuestionIdByProgramming(Long paperId);

    List<ExamPaper> getByCreatorId(Long creatorId, Long companyId);

    /**
     * 删除试卷，将试卷状态值为“禁用”
     * @param paperId 试卷标识id
     */
    int DeleteExamPaper(Long paperId);
}
